

// 物理内存：内存条的空间
// 虚拟内存：一种内存管理技术，用一部分硬盘当做内存
// 高地址(0xffffffff)->低地址(0x00000000)依次为：
/**
 内核空间
 栈内存：由高地址向低地址扩展
 内存映射区域
 堆内存：由低地址往高地址扩展
 全局区/静态区
 代码区(存放程序编译后的cpu指令)
 预留区
 */
// 申请内存时由glibc(类似jdk中的rt.jar java.lang.String),C标准库/运行库定义 的函数申请
// linux中由malloc内部调用brk、mmap两个函数真正申请内存
// brk:推内存指针,指针_edata一开始位于堆内存起始位置，往高地址推，要调用malloc申请10k内存，_edata往上走
// mmap:找一块满足大小的内存返回。如果申请内存大于128K使用mmap，小于128k使用brk，128可配置
// brk：假如先申请A内存又申请B，A被释放了，又申请了11k，_edata不会往下走使用A的空间从而产生内存碎片而是又会往上推，
//但是如果申请的是10k，释放AB就会执行内存收缩，指针就会往下走。但是内存可能会重用被释放的内存，所以需要使用memset对被释放但是有数据的内存清空
// mmap:可以随时释放调申请的内存，由于需要搜寻内存，所以没有brk效率高
int main12() {
    return 0;
}
